﻿using Minecraft.Model.ReqResp;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace Minecraft.ServiceStackRedisTest.t
{
	public class Class1
	{
		public static void Do()
		{

			////获取执行文件的文件路径
			//var execName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, AppDomain.CurrentDomain.FriendlyName);

			//var type = typeof(BaseResp);
			//var platwr = new TestReq().PlayerId;
			//var gg = new TestReq();
			//var name = nameof(platwr);
			// name = nameof(gg.PlayerId);

			//var d = CommonConfig.GetTablePostfix(10000, 10000);

			//var dict= IpConstConfig.GetConstConfigDict();

			string a = "";
			var g = a ?? throw new Exception("dfgfgd"); //不可，只能判断是否为null，不能判断是否为空字符串

			List<int> list = new List<int>() { 1, 2, 3, 4, 5 };
			var li1 = list.Where(m => m <= 2).ToList();
			li1[0] = 6; //where后修改筛选后的列表，并不会影响源头，可以放心对li1操作

			var li2 = list.Take(2).ToList();
			li2[0] = 7; //修改后不影响源数据


			//字符串去重，可以去重，去重后不影响源数据
			List<string> Strlist = new List<string> { "t", "t", "y" };
			var distinct = Strlist.Distinct().ToList();


			TestCmdResp testResp = new TestCmdResp
			{
				PlayerId = 1,
			};
			object obj = testResp;
			var t1 = obj as TestCmdResp;
			t1.PlayerId = 2;   //使用 as 转换对象后，两个对象一样，是用一个引用

			//用Newtonsoft.Json对只包含字段的对象进行序列化（可行）
			var testStr = testResp.JsonSerialize();



			//字段和属性的get set是否同步


			//FirstOrDefault()的引用测试
			//（1）集合元素为值类型（不变）
			var fdList = new List<int> { 1, 2, 3 };
			var fdListFirstOrd = fdList.FirstOrDefault();
			fdListFirstOrd = 4;
			//（2）集合元素为引用类型（会跟着变化）
			var fdList2 = new List<TestCmdResp>();
			fdList2.Add(new TestCmdResp { PlayerId = 1 });
			fdList2.Add(new TestCmdResp { PlayerId = 2 });
			fdList2.Add(new TestCmdResp { PlayerId = 3 });
			var fdListFirstOrd2 = fdList2.FirstOrDefault();
			fdListFirstOrd2.PlayerId = 4;

			//List<>  get set  与指定字段的同步测试，List<>的变化触发事件

			//BindingList<>用法，以及怎么主动触发事件，
			//列表中的元素属性值的改变会不会触发事件（只是元素属性值的改变，不会触发事件，要主动触发）

			//INotifyPropertyChanged用法
			//C# INotifyPropertyChanged用法，监听属性值发生改变




			List<int> li222 = new List<int>() { 16, 6, 4, 8, 12 };
			li222 = li222.OrderBy(m => m).ToList();


			var r = new KeyValuePair<string, int>("5", 7);


			//多个task查看线程id

			int ty = 5 << 1;

		}
	}
}
